import { BehaviorSubject, Observable } from 'rxjs';

/**
 * 路由相关信息
 * 相关模块自己来调用更新
 */
class RouteInfo {
  /** 登录状态 */
  private _loginState$ = new BehaviorSubject<boolean | null>(null);

  /** 登录状态 */
  public get loginState$(): Observable<boolean | null> {
    return this._loginState$;
  }

  /** 登录状态 */
  public get loginState(): boolean | null {
    return this._loginState$.value;
  }

  /**
   * 设置登录状态
   * @param value
   */
  public setLoginState(state: boolean): void {
    this._loginState$.next(state);
  }

  /** 权限列表 */
  private _auths: Set<string> = new Set();
  public get auths(): ReadonlySet<string> {
    return this._auths;
  }

  /**
   * 设置路由权限列表，相关模块需要自己调用这里来进行更新
   * @param value
   */
  public setAuths(value: Set<string>): void {
    // console.debug('[RouteInfo] set auth: ', value);

    this._auths = value;
  }

  /**
   *
   */
  public accountType: 'unknown' = 'unknown';
}

export const routeInfo = new RouteInfo();
